#ifndef TCPCLIENT_H
#define TCPCLIENT_H

#include <sys/socket.h>
#include <netinet/in.h>
#include <string>
#include <thread>
#include <mutex>

class TcpClient 
{
private:
    int sockfd;
    struct sockaddr_in server_addr;
    bool isConnected;
    std::thread recvThread;
    std::mutex mtx;
    std::string recvBuffer;

    void receiveLoop();

public:
    TcpClient();
    ~TcpClient();

    bool connectToServer(const std::string& ip, int port);
    bool sendData(const std::string& data);
    std::string getReceivedData();
    void clearBuffer(); 
    bool isConnectedStatus() const { return isConnected; }

    void disconnect();
    //直接接收数据到缓冲区（供角色协商阶段使用）
    ssize_t recvData(char* buffer, size_t len) ;

    // 设置为非阻塞模式（对战阶段用）
    bool setNonBlocking();
    // 恢复阻塞+超时模式（角色协商阶段用）
    bool setBlockingWithTimeout(int timeoutSec = 3);
    void startRecvThread(); // 启动接收线程
};

#endif 